//package com.intelligencesoft.pss.utils;
//
//import java.io.UnsupportedEncodingException;
//import java.net.URLDecoder;
//import java.net.URLEncoder;
//import java.util.Date;
//import java.util.Hashtable;
//import java.util.Map;
//import javax.servlet.http.Cookie;
//import javax.servlet.http.HttpServletRequest;
//import javax.servlet.http.HttpServletResponse;
//import javax.servlet.http.HttpSession;
//
//import org.springframework.web.bind.annotation.ModelAttribute;
//
//import com.intelligencesoft.pss.entity.base.UserInfo;
//
//import cn.com.zhyu.rts.sys.model.Examinee;
//import cn.com.zhyu.rts.sys.model.Org;
//import cn.com.zhyu.rts.sys.model.Permit;
//import cn.com.zhyu.rts.util.Base64;
//import cn.com.zhyu.rts.util.Base64Util;
//
//public class SessionCookieManager {
//
//	/**
//	 * 用户登录时,建立cookie时的名字
//	 */
//	private static final String COOKIE_NAME = "rts.examinee.id.login.cookie.name";
//	/**
//	 * cookie中各项值的名字,有先后顺序
//	 */
//	private static final String[] COOKIE_NAMES = new String[] { "EXAMINEE_ID",
//			"EXAMINEE_USERNAME", "EXAMINEE_REALNAME", "ORG_ID", "ORG_CODE",
//			"ORG_NAME", "READ_PERMIT", "WRITE_PERMIT", "ADV_PERMIT",
//			"EXAMINEE_IDCARD", "QUARTERS_NAME", "POLICECLASS_NAME",
//			"POWER_ORG_ID", "POWER_ORG_CODE", "POWER_ORG_NAME", "ONLINE_TIME",
//			"LOGIN_IP", "KNOWLEGDEPOWER", "CHECKE_VALUE_DEFAULT",
//			"CHECK_VALUE_CHECKED", "CHECK_VALUE_REPORT", "POWER", "TOKENID" };
//	/**
//	 * flex客户端登录时,建立session时的名字
//	 */
//	private static final String FLEX_SESSION_NAME = "rts.flex.login.session.name";
//	/**
//	 * 用户登录时,rts_*建立cookie时的名字
//	 */
//	private static final String AUTH_COOKIE_NAME = "rts.other.login.cookie.name";
//	/**
//	 * 用户登录时,rts_*建立session时的名字
//	 */
//	private static final String AUTH_SESSION_NAME = "rts.other.login.session.name";
//	/**
//	 * cookie值中各个数据间的分隔符
//	 */
//	private static final String COOKIE_NAME_SEP = ";";
//	/**
//	 * rts_* cookie中各项值的名字,有先后顺序
//	 */
//	private static final String[] AUTH_COOKIE_NAMES = new String[] {
//			"AUTH_USERID", "AUTH_USERNAME", "AUTH_REALNAME", "AUTH_ORGID",
//			"READ_PERMIT", "WRITE_PERMIT", "ADV_PERMIT" };
//	/**
//	 * cookie的生命周期(秒)
//	 */
//	private static final int COOKIE_MAX_AGE = 60 * 60;
//
//	// 方法
//
//	/**
//	 * 将flex登录信息存session
//	 * 
//	 * @param e
//	 * @param session
//	 */
//	public static void setSessionLogininfo(Examinee e, HttpSession session) {
//		if (e != null) {
//			session.setAttribute(FLEX_SESSION_NAME, e);
//		}
//	}
//
//	/**
//	 * 将web登录信息存session
//	 * 
//	 * @param e
//	 * @param session
//	 */
//	public static void setWebSessionLogininfo(Examinee e, HttpSession session) {
//		if (e != null) {
//			session.setAttribute(AUTH_SESSION_NAME, e);
//		}
//	}
//
//	/**
//	 * 将用户登录信息保存在cookie中
//	 * 
//	 * @param request
//	 * @param response
//	 * @param examinee
//	 */
//	public static void setAuthLoginInfoToCookie(HttpServletRequest request,
//			HttpServletResponse response, Examinee examinee) {
//		setAuthLoginInfo(request, response, examinee);
//	}
//
//	/**
//	 * 将用户登录信息保存在session中
//	 * 
//	 * @param request
//	 * @param response
//	 * @param examinee
//	 */
//	public static void setAuthLoginInfoToSession(HttpServletRequest request,Examinee examinee) {
//		setWebSessionLogininfo(examinee, request.getSession());
//	}
//
//	/**
//	 * 判断当前用户有没有管理权限
//	 * 
//	 * @return 如果有则返回true
//	 */
//	public static boolean isAdmin(HttpServletRequest request,HttpServletResponse response) {
//		Examinee examinee = getAuthLoginInfoFromCookie(request,response);
//		if (null!=examinee) {
//			long permitCode = examinee.getPermitCode().get(4);
//			boolean isAdmin = (permitCode - 1) != 0;
//			return isAdmin;
//		}
//		return false;
//	}
//
//	/**
//	 * 创建tokenid
//	 * 
//	 * @param e
//	 * @return
//	 */
//	public static String createTokenId(Examinee e) {
//		StringBuffer buffer = new StringBuffer();
//		buffer.append(e.getId());
//		buffer.append(",");
//		buffer.append(e.getUsername());
//		buffer.append(",");
//		buffer.append(e.getRealname());
//		buffer.append(",");
//		buffer.append(e.getOrg().getId());
//		
//		String rtsTokenId = new String(Base64.encode(buffer.toString()
//				.getBytes()));
//		return rtsTokenId;
//	}
//
//	/**
//	 * 解析tokenid
//	 * 
//	 * @param e
//	 * @return
//	 */
//	public static Examinee decodeTokenId(String rtsTokenId) {
//		String decodeCookieValue = base64Decode(rtsTokenId);
//		String[] split = decodeCookieValue.split(",");
//		Examinee examinee = new Examinee();
//		examinee.setId(split[0]);
//		examinee.setUsername(split[1]);
//		examinee.setRealname(split[2]);
//		Org org = new Org();
//		org.setId(split[3]);
//		examinee.setOrg(org);
//		return examinee;
//	}
//	
//	public static String getCookieValue(HttpServletRequest request,
//			HttpServletResponse response, Examinee examinee) {
//		Map<String, String> cookieValues = new Hashtable<String, String>();
//		// 基本信息
//		cookieValues.put(AUTH_COOKIE_NAMES[0], examinee.getId());
//		if (null != examinee.getUsername()) {
//			cookieValues.put(AUTH_COOKIE_NAMES[1], examinee.getUsername());
//		} else {
//			if (null != examinee.getPoliceType()
//					&& examinee.getPoliceType().equals(2L)) {
//				cookieValues.put(AUTH_COOKIE_NAMES[1], "新警");
//			} else {
//				cookieValues.put(AUTH_COOKIE_NAMES[1], "");
//			}
//		}
//		if (null != examinee.getRealname()) {
//			cookieValues.put(AUTH_COOKIE_NAMES[2], examinee.getRealname());
//		} else {
//			cookieValues.put(AUTH_COOKIE_NAMES[2], "");
//		}
//		// 组织机构
//		cookieValues.put(AUTH_COOKIE_NAMES[3], examinee.getOrg().getId());
//
//		// 权限代码
//		if (examinee.getPermitCode() != null) {
//			cookieValues.put(AUTH_COOKIE_NAMES[4], examinee.getPermitCode()
//					.get(Permit.READ).toString());
//			cookieValues.put(AUTH_COOKIE_NAMES[5], examinee.getPermitCode()
//					.get(Permit.WRITE).toString());
//			cookieValues.put(AUTH_COOKIE_NAMES[6], examinee.getPermitCode()
//					.get(Permit.ADVANCED).toString());
//		} else {
//			cookieValues.put(AUTH_COOKIE_NAMES[4], "0");
//			cookieValues.put(AUTH_COOKIE_NAMES[5], "0");
//			cookieValues.put(AUTH_COOKIE_NAMES[6], "0");
//		}
//
//		StringBuffer sb = new StringBuffer();
//		for (int i = 0; i < AUTH_COOKIE_NAMES.length; i++) {
//			sb.append(cookieValues.get(AUTH_COOKIE_NAMES[i]) + COOKIE_NAME_SEP);
//		}
//		// 去掉最后一个分隔符
//		sb.deleteCharAt(sb.length() - COOKIE_NAME_SEP.length());
//		String value="";
//		try {
//			value = Base64Util.encode(URLEncoder.encode(sb.toString(),"UTF-8"));
//		} catch (UnsupportedEncodingException e) {
//			e.printStackTrace();
//		}
//		return value;
//	}
//
//	/*
//	 * ************************************************************************************
//	 * 私有方法，适用于本类使用
//	 * *************************************************************
//	 * ***********************
//	 */
//	private static void setAuthLoginInfo(HttpServletRequest request,
//			HttpServletResponse response, Examinee examinee) {
//		String value = getCookieValue(request, response, examinee);
////		response.setHeader("Access-Control-Allow-Origin", "*");
//		response.setHeader("P3P","CP=\"CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR\"");
//		Cookie c = new Cookie(AUTH_COOKIE_NAME, value);
//		c.setMaxAge(-1);
//		c.setPath("/");
//		response.addCookie(c);
//	}
//
//	private static Examinee getAuthLoginInfo(HttpServletRequest request,HttpServletResponse response) {
////		response.setHeader("Access-Control-Allow-Origin", "*");
//		response.setHeader("P3P","CP=\"CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR\"");
//		String value = null;
//		Cookie[] cookies = request.getCookies();
//		if (cookies != null) {
//			int cookiesLength = cookies.length;
//			for (int i = 0; i < cookies.length; i++) {
//				
//				if (i<cookiesLength&&cookies[i].getName().equals(AUTH_COOKIE_NAME)) {
//					value = cookies[i].getValue();
//				}
//			}
//		}
//		if (value == null) {
//			return null;
//		} else {
//			Map<String, String> cookieValues = new Hashtable<String, String>();
//			String[] values = null;
//			try {
//				values = URLDecoder.decode(Base64Util.decode(value),"UTF-8").split(COOKIE_NAME_SEP);
//			} catch (UnsupportedEncodingException e) {
//				// TODO Auto-generated catch block
//				e.printStackTrace();
//			}
//			for (int i = 0; i < AUTH_COOKIE_NAMES.length; i++) {
//				cookieValues.put(AUTH_COOKIE_NAMES[i], values[i]);
//			}
//			Examinee examinee = new Examinee();
//			// 基本信息
//			examinee.setId(cookieValues.get(AUTH_COOKIE_NAMES[0]));
//			examinee.setUsername(cookieValues.get(AUTH_COOKIE_NAMES[1]));
//			examinee.setRealname(cookieValues.get(AUTH_COOKIE_NAMES[2]));
//
//			// 组织机构
//			Org org = new Org();
//			org.setId(cookieValues.get(AUTH_COOKIE_NAMES[3]));
//			examinee.setOrg(org);
//
//			// 权限代码
//			Map<Integer, Long> permitCode = new Hashtable<Integer, Long>(3);
//			permitCode.put(Permit.READ,
//					Long.parseLong(cookieValues.get(AUTH_COOKIE_NAMES[4])));
//			permitCode.put(Permit.WRITE,
//					Long.parseLong(cookieValues.get(AUTH_COOKIE_NAMES[5])));
//			permitCode.put(Permit.ADVANCED,
//					Long.parseLong(cookieValues.get(AUTH_COOKIE_NAMES[6])));
//			examinee.setPermitCode(permitCode);
//			return examinee;
//		}
//	}
//
//	private static String base64Decode(String value) {
//		String decodeStr = "";
//		try {
//			if (value != null && !"".equals(value)) {
//				byte[] decode = Base64.decode(value);
//				decodeStr = new String(decode);
//			}
//		} catch (Exception e) {
//			e.printStackTrace();
//		}
//		return decodeStr;
//	}
//
//	/**
//	 * 清除已经登录的用户信息
//	 */
//	public static void clearAuthCookieLoginInfo(HttpServletRequest request,
//			HttpServletResponse response) {
//		Cookie[] cookies = request.getCookies();
//		if (cookies != null) {
//			for (int i = 0; i < cookies.length; i++) {
//				Cookie c = cookies[i];
//				if (c.getName().equals(AUTH_COOKIE_NAME)) {
//					c.setValue(null);
//					c.setMaxAge(0);
//					c.setPath("/");
//					response.addHeader("Access-Control-Allow-Origin", "*");
//					response.addCookie(c);
//				}
//			}
//		}
//	}
//
//	public static void clearCookieLoginInfo(HttpServletRequest request,
//			HttpServletResponse response) {
//
//		Cookie[] cookies = request.getCookies();
//		if (cookies != null) {
//			for (int i = 0; i < cookies.length; i++) {
//				Cookie c = cookies[i];
//				if (c.getName().equals(COOKIE_NAME)) {
//					// 将coockie里的ONLINE_TIME改成0
//					Map<String, String> cookieValues = new Hashtable<String, String>();
//					String[] values = Base64Util.decode(c.getValue()).split(
//							COOKIE_NAME_SEP);
//					for (int j = 0; j < COOKIE_NAMES.length; j++) {
//						cookieValues.put(COOKIE_NAMES[j], values[j]);
//					}
//					cookieValues.put(COOKIE_NAMES[15], "0");
//					c.setValue(null);
//					c.setMaxAge(0);
//					c.setPath("/");
//					response.addHeader("Access-Control-Allow-Origin", "*");
//					response.addCookie(c);
//				}
//			}
//		}
//	}
//
//	public static void clearAuthSession(HttpSession session) {
//		if (session != null) {
////			session.invalidate();
//			session.removeAttribute(AUTH_SESSION_NAME);
//		}
//	}
//
//	public static void resetAuthLoginInfo(HttpServletRequest request,
//			HttpServletResponse response) {
//		// 从cookie中取得examineeId
//		String value = null;
//		Cookie[] cookies = request.getCookies();
//		if (cookies != null) {
//			for (int i = 0; i < cookies.length; i++) {
//				if (cookies[i].getName().equals(AUTH_COOKIE_NAME)) {
//					value = cookies[i].getValue();
//				}
//			}
//		}
//
//		if (value != null) {
//			long now = new Date().getTime();
//			Map<String, String> cookieValues = new Hashtable<String, String>();
//			String[] values = Base64Util.decode(value).split(COOKIE_NAME_SEP);
//			for (int i = 0; i < AUTH_COOKIE_NAMES.length; i++) {
//				cookieValues.put(AUTH_COOKIE_NAMES[i], values[i]);
//			}
//
//			// 重设超时时间
//			cookieValues.put(AUTH_COOKIE_NAMES[4], String.valueOf(now));
//
//			StringBuffer sb = new StringBuffer();
//			for (int i = 0; i < AUTH_COOKIE_NAMES.length; i++) {
//				sb.append(cookieValues.get(AUTH_COOKIE_NAMES[i])
//						+ COOKIE_NAME_SEP);
//			}
//			// 去掉最后一个分隔符
//			sb.deleteCharAt(sb.length() - COOKIE_NAME_SEP.length());
//			String newValue = Base64Util.encode(sb.toString());
//
//			Cookie newCookie = new Cookie(AUTH_COOKIE_NAME, newValue);
//			newCookie.setMaxAge(COOKIE_MAX_AGE);
//			newCookie.setPath("/");
//			response.addHeader("Access-Control-Allow-Origin", "*");
//			response.addCookie(newCookie);
//		}
//	}
//
//	/**
//	 * *******************************get方法*************************************
//	 */
//
//	/**
//	 * 从session中取flex登录信息
//	 * 
//	 * @param session
//	 * @return
//	 */
//	public static Examinee getSessionLogininfo(HttpSession session) {
//		if (session.getAttribute(FLEX_SESSION_NAME) != null) {
//			return (Examinee) session.getAttribute(FLEX_SESSION_NAME);
//		}
//		return null;
//	}
//
//	/**
//	 * 从cookie获取用户登录信息
//	 * 
//	 * @param request
//	 * @param response
//	 * @param examinee
//	 */
//	public static UserInfo getAuthLoginInfoFromCookie(HttpServletRequest request,HttpServletResponse response) {
//		return getAuthLoginInfo(request,response);
//	}
//
//	/**
//	 * 从session获取用户登录信息
//	 * 
//	 * @param request
//	 * @param response
//	 * @param examinee
//	 */
//	public static Examinee getAuthLoginInfoFromSession(
//			HttpSession session) {
//		if (session.getAttribute(AUTH_SESSION_NAME) != null) {
//			return (Examinee) session.getAttribute(
//					AUTH_SESSION_NAME);
//		}
//		return null;
//	}
//	
//	/**
//	 * 从session获取用户登录信息
//	 * 
//	 * @param request
//	 * @param response
//	 * @param examinee
//	 */
//	public static Examinee getAuthLoginInfoFromSession(
//			HttpServletRequest request) {
//		HttpSession session = request.getSession();
//		if (session.getAttribute(AUTH_SESSION_NAME) != null) {
//			return (Examinee) session.getAttribute(
//					AUTH_SESSION_NAME);
//		}
//		return null;
//	}
//
//	/**
//	 * 获取ip地址
//	 */
//	public static String getIpAddr(HttpServletRequest request) {
//		String ip = request.getHeader("x-forwarded-for");
//		if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
//			ip = request.getHeader("Proxy-Client-IP");
//		}
//		if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
//			ip = request.getHeader("WL-Proxy-Client-IP");
//		}
//		if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
//			ip = request.getRemoteAddr();
//		}
//		return ip;
//	}
//
//	protected HttpServletRequest request;
//	protected HttpServletResponse response;
//	protected HttpSession session;
//
//	@ModelAttribute
//	public void setReqAndRes(HttpServletRequest request,
//			HttpServletResponse response) {
//		this.request = request;
//		this.response = response;
//		this.session = request.getSession();
//	}
//}
